<?php
/**
 * @class		UsersController
 * @ingroup		users_controllers
 * @brief		Controller của đối tượng User, bao gồm các phương thức điều khiển các luồng xử lý khi thao tác với đối tượng user
 * @author		BaoNN
 * @version		1.0
 * @date		2009-2010
 */
App::import('Model', 'users.User');
class UsersController extends AppController {
	/**
	 @var $name
	 @brief Tên của controller
	 */
	var $name = 'Users';
	/**
	 @var $uses
	 @brief Các model mà controller sử dụng
	 */
	var $uses = array('User');
	/**
	 @var $helpers
	 @brief Các helper mà controller sử dụng
	 */
	var $helpers = array();
	
	/**
	 * Phương thức được sử dụng để thực hiện các xử lý trước khi bắt đầu 1 hành động
	 */
	function beforeFilter() {
		parent::beforeFilter();
		
		$this->configs = $this->User->loadConfig();
		
		$this->set('configs', $this->configs);
	}
	/**
	 * Phương thức login() dùng để kiểm tra đăng nhập của người dùng
	 * 
	 * @return Đăng nhập thành công hoặc hoặc Ném ra lỗi nếu các điều kiện không hợp lệ
	 */
	function login() {
		
		// 1. Trường hợp người dùng đã đăng nhập rồi
		if($this->Session->read('user_id')){
			$this->Session->setFlash(__('Bạn đã đăng nhập rồi. Bạn cần phải đăng xuất trước khi bạn đăng nhập với tài khoản khác.', true), "flash_error");
			$this->redirect(array(
				'plugin'		=> 'users',
				'controller'	=> 'manage_users',
				'action'		=> 'index'
			));
		}
		
		// 2. Dữ liệu được gửi lên (có nghĩa là người dùng post dữ liệu lên)
		if(!empty($this->data)) {
			$this->data['User']['password'] = md5($this->data['User']['password']);
			$user = $this->User->find($this->data['User']);
			
			// 2.1 Nếu đăng nhập không thành công, báo lỗi
			// Trường hợp username không tồn tại
			if(empty($user)) {
				//$this->showError(__('Username or password is invalid.',true));
				$this->Session->setFlash(__('Sai tên đăng nhập hoặc mật khẩu.',true), "flash_error");
			} else {
				// 2.2 Nếu đăng nhập thành công => lưu dữ liệu
				// Ghi mã người dùng id, tên đăng nhập username, tên đầy đủ fullname vào Session của hệ thống
				unset($user['password']);
				$this->Session->write('user.info', $user);
					
				$this->Session->write('user_id', $user['User']['id']);
				$this->Session->write('username', $user['User']['username']);
				$this->Session->write('fullname', $user['User']['first_name']. ' ' . $user['User']['last_name']);
				
				// Check redirect Url
				$this->Session->setFlash(__('Đăng nhập thành công!',true), "flash_success");
				
				if ($this->Session->check('redirect_url')) {
					$params = $this->Session->read('redirect_url');
					$this->Session->delete('redirect_url');
					$this->redirect($params);
				} else {
					$this->redirect($this->configs['User']['login_redirect']);
				}
			}
		}
	}
	
	/**
	 * Phương thức logout() được dùng để đăng xuất khỏi phiên làm việc hiện tại
	 * 
	 * @return Đăng xuất thành công hoặc Ném ra lỗi nếu các điều kiện không hợp lệ
	 */	
	function logout() {
		
		// Xóa thông tin Session user_id, username, fullname
		// hủy Session
		// Trở về trang đăng nhập
		$this->Session->delete('user_id');
		$this->Session->delete('username');
		$this->Session->delete('fullname');
		$this->Session->destroy();
		$this->redirect(array(
			'plugin'		=> 'users',
			'controller'	=> 'users',
			'action'		=> 'login'
		)); 
	}
	
	/**
	 * Phương thức change_pass() được dùng để thay đổi mật khẩu của người dùng
	 * 
	 * @return Xác nhận thay đổi thành công mật khẩu
	 */
	function change_pass() {
		
		// @var $userid lấy thông tin mã người dùng trong Session hiện tại
		// @var json mảng dùng để lưu thông điệp lỗi hoặc thành công 
		$user_id = $this->user_id;
		$json = array();
		
		// Trong trường hợp dữ liệu được gởi lên tiến hành thay đổi mật khẩu
		Configure::write('debug', 0);
		if (!empty($this->data)) {
			try {
				
				//  triệu gọi hàm changePassword($user_id, $oldPass, $newPassword, $reNewPassword) trong Model User
				$this->User->changePassword(
					$user_id, 
					$this->data['User']['old_password'],
					$this->data['User']['new_password'],
					$this->data['User']['re_new_password']				
				);
				$json['error'] = 0;
				$json['message'] = __("Mật khẩu đã được cập nhật thành công!.", true);
				echo json_encode($json);
				exit();
			} catch (Exception $ex) {
				
				// Ném ra lỗi biệt lệ
				$json['error'] = 1;
				$json['message'] = __($ex->getMessage(), true);
				echo json_encode($json);
				exit();
			}
						
			$this->Session->setFlash(__('Mật khẩu đã được cập nhật thành công!', true), "flash_success");
			exit;
		}
		$this->data['User']['id'] = $user_id;
	}
	
	/**
	 * Phương thức already_login() được dùng để thông báo người dùng đã đăng nhập ở trong phiên làm việc hiện tại rồi
	 * 
	 * @return Đưa ra lời thông báo
	 */
	function already_login() {
		
	}
	
	/**
	 * Phương thức success_login() được dùng để thông báo người dùng đăng nhập thành công trong phiên làm việc hiện tại
	 * 
	 * @return Đưa ra lời thông báo
	 */
	function success_login() {
		
	}
}
?>